package mysql

import (
	"gorm.io/gorm"
	"wms/models"
)

// GetRoleMenusByRoleIdentity 获取指定角色对应有权操作的菜单列表，上层获取结构是 define.RoleMenu 列表
func GetRoleMenusByRoleIdentity(roleIdentity string, isAdmin bool) (*gorm.DB, error) {
	if isAdmin {
		// 如果是管理，直接获取所有菜单可见
		tx := DB.Model(new(models.MenuBasic)).Select("id, parent_id, identity, name, web_icon, sort, path, level").
			Order("sort ASC")
		return tx, nil
	}

	// 先查询角色的 原生 id，role_id
	var roleId uint
	tx := GetRoleBasicIdByIdentity(roleIdentity)
	if err := tx.Find(&roleId).Error; err != nil {
		return nil, err
	}
	// 构建查询语句，关联角色与菜单表，选择所需的菜单字段，并按照sort字段升序排序
	tx1 := DB.Model(new(models.RoleMenu)).Select("mb.id, mb.parent_id, mb.identity, mb.name, mb.web_icon, mb.sort, "+
		"mb.path, mb.level, role_menu.crud").Joins("LEFT JOIN menu_basic mb ON mb.id = role_menu.menu_id").
		Where("role_menu.role_id = ?", roleId).Order("mb.sort ASC")
	return tx1, nil
}

// GetRoleMenusByRoleId 获取指定角色对应有权操作的菜单列表，上层获取的结构是菜单的 identity 列表：define.RoleDetailReply.MenuIdentities
func GetRoleMenusByRoleId(roleId uint) *gorm.DB {
	tx := DB.Model(new(models.RoleMenu)).Select("mb.identity, role_menu.crud").
		Joins("LEFT JOIN menu_basic mb ON mb.id = role_menu.menu_id").
		Where("role_menu.role_id = ?", roleId).Order("mb.sort ASC")
	return tx
}
